home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 36 / spawn15.zip / SPAWN.DOC < prev    next >
Text File  |  1990-11-01  |  26KB  |  525 lines

  1.  
  2.                             Spawn Version 1.5
  3.                     Public Domain by Albert H. Ariail
  4.                              Copyright 1990
  5.  
  6. The following program is a Desqview specific utility to allow you to 
  7. execute a more or less arbitrary DOS command in the background. This 
  8. program nicely implements what someone has called "the compile in the 
  9. background circus trick".  The background process inherits the default 
  10. directory and the environment that was in effect when spawn was invoked.  
  11. Spawn will execute any DOS internal or external command that does not 
  12. require operator intervention and is otherwise compatible with Desqview.  
  13. Another useful application is to use spawn to force full screen programs 
  14. to load into their own windows.  This makes working in a small DOS 
  15. window much easier. 
  16.  
  17. Hardware/Software requirements:
  18. IBM PC/XT/AT or 100% compatible running DOS 3.x and Desqview 2.x . A 386
  19. processor is not specifically required, but you will certainly get a lot
  20. more out of this program if you have one.
  21.  
  22. ****************************************************************************
  23. *  If you have any problems, questions, comments, etc about this program,  *
  24. *  Please feel free to contact me.  My Compuserve user id is [73510,2562]  *
  25. ****************************************************************************
  26.  
  27. If you are new to Desqview, the following definitions may help make this
  28. documentation more intelligible.
  29.  
  30. I will use the term "parent process" to refer to the Desqview window from 
  31. which you invoke spawn.  It is the function of spawn to open a new 
  32. Desqview window to execute the supplied command.  This will be called the 
  33. "child process".  A process is in the foreground when it can receive input
  34. from the keyboard, otherwise it is in the background.  Foreground windows
  35. are always visible, background windows may or may not be, depending on
  36. whether or not they are behind other windows.  The PIF file for a window
  37. is the Desqview Program Information File that is used to tell Desqview
  38. more about the program that is to be executed.  When you are manipulating
  39. the "Change Program" menu, you are editing the PIF file for that entry.
  40. Under Desqview, a process that is invoked with the keys "XX" will have
  41. a PIF file of c:\dv\xx-pif.dvp .
  42.  
  43. Installation Instructions:
  44.  
  45. This program assumes that the Desqview executable and all of your PIF 
  46. files reside in the directory C:\DV .  If this is not the case, before 
  47. starting Desqview, you should set the environment variable DESQ to point 
  48. to the correct pathname, e.g. 
  49.  
  50. c> set desq=e:\desqview
  51.  
  52. In what follows if I use the directory c:\dv, I will be referring to 
  53. either this directory or whatever is in the variable DESQ . 
  54.  
  55. After unpacking the archive file, copy file files sp-pif.dvp and 
  56. dvcmd.com to the current Desqview directory.  dvcmd.com file must be 
  57. present in c:\dv and not renamed.  sp-pif.dvp is the Program Information 
  58. File that spawn uses to launch the new process.  This may be renamed if 
  59. you specify the correct (complete) pathname in the environment variable 
  60. SP-PIF . SP does not have to be present in your Desqview "Open Process" 
  61. menu unless you wish to change the default settings.  The program 
  62. spawn.com can reside anywhere accessible from your current PATH variable. 
  63.  
  64. Update information:
  65. If have an earlier version of spawn, here some of the features
  66. included with this release.
  67.  
  68.   New options: /r - remain in dos
  69.                /z - exit with bkgd operation disabled
  70.                /e - exit with bkgd operation enabled
  71.                /n - output child's "process handle"
  72.  
  73.   New environment options: SP-CMD
  74.  
  75.   The ability to operate outside of desqview (after a fashion).
  76.   Reworked spawn "command|command". Does not feed keyboard.
  77.  
  78.   Repaired some minor bugs, mostly, involving spawn/p:xx not starting
  79.   properly with certain PIF configurations.
  80.  
  81.   Utility programs
  82.     kill.com - shutdown desqview windows 
  83.     release.com - pass a return code to spawn.
  84.     dvtest.com - test for the presence of desqview in a batch file
  85.     alert.exe  - general purpose message utility
  86.  
  87. Basic operation:
  88.  
  89. To invoke a command in a background window, simply enter:
  90.  
  91. c>spawn program [arguments]
  92.  
  93. where program is any valid DOS internal or external command with whatever
  94. arguments it expects, e.g.,
  95.  
  96. c>spawn copy c:\dv\*.* a:
  97.  
  98. If you are executing an external command (a .COM or .EXE file) you can save
  99. about 5K of memory in the child process if you specify a complete pathname
  100. for "program" :
  101.  
  102. c>spawn c:\bin\pkzip.exe -par e:\archive c:\*.*
  103.  
  104. instead of
  105.  
  106. c>spawn pkzip -par e:\archive c:\*.*
  107.  
  108. You can also spawn off pipes and filter programs by enclosing the command
  109. in quotes:
  110.  
  111. spawn "dir *.* | sort >sort.dat"
  112.  
  113. Note that  spawn "dir *.* >dir.dat"
  114. is completely different from   spawn dir *.* >dir.dat
  115. The latter will put the output of spawn in the file dir.dat (usually there
  116. is no output from spawn itself, so dir.dat will be empty).
  117.  
  118. Environment variables used by spawn:
  119.  
  120. CMDSWT -  Defines text which will be placed on the command line whenever 
  121.           spawn invokes command.com. This is usually assigned to a string 
  122.           such as CMDSWT=\e:1500, which for DOS 3.2 or 3.3 will give 
  123.           some additional free space in the child's environment. 
  124.  
  125. SP-MEM -  Defines the amount of memory to be given to the child process 
  126.           e.g., SP-MEM=256 will grant 256k bytes of free memory. If 
  127.           specified, this will override the memory allocation defined in 
  128.           sp-pif.dvp which initially is set to "all you can get". 
  129.  
  130. SP-PIF -  Defines the Desqview Program Information file used by spawn. 
  131.           The default is c:\dv\sp-pif.dvp . You must specify a complete 
  132.           DOS pathname if this is used (for example: c:\desq\spawn.pif or 
  133.           c:\dv\xx-pif.dvp). 
  134.  
  135. DESQ   -  Defines the pathname to the desqview directory. If not 
  136.           specified, c:\dv is assumed.  dvcmd.com must reside in this 
  137.           directory. If the PIF file name has not been changed as 
  138.           described above, sp-pif.dvp must also be in this directory. 
  139.  
  140. COMSPEC - This defines the program name which is used to invoke 
  141.           "command.com" As you probably know, this is generally set by 
  142.           DOS at boot up and is rarely changed by the operator. 
  143.  
  144. SP-CMD    - This option is only used outside of desqview.  It defines an
  145.       alternate command processor to be used to execute the
  146.       specified command.  Its primary function is to cause spawn
  147.       to invoke the program SWAPDOS(tm) when executed outside of
  148.       desqview. See below.
  149.  
  150. The following environment variables are set in the child (overriding
  151. any previous definition).
  152.  
  153. CMDLINE - The command and parameters to be executed.
  154.  
  155. PARENT  - This is a Desqview task handle for the parent, which is an
  156.           8 byte hex number in the format ?dead0000.  The ? is included
  157.           obscure for semantic reasons known only to me.  This is used by 
  158.           the utilities kill.com and release.com to find the parent 
  159.           process. 
  160.  
  161. Run time options:
  162. Note: all of the options below must be placed immediately after the command
  163. name "spawn" or they will be assumed to be options for the command being
  164. executed, e.g., spawn/f copy ...
  165.  
  166.  /a    - alarm at completion
  167.          This options causes the child process to pause at completion. If 
  168.          running in the background, the child process will be placed in 
  169.          to the foreground.  This allows you to review any exit 
  170.          conditions from the spawned command.  To acknowledge the message, 
  171.          key ESC or click the mouse. 
  172.  
  173.  /s    - silent alarm
  174.          same as /a but less noisy.
  175.  
  176.  /f    - move child to foreground
  177.          Normally the child process is executed in the background. This 
  178.          will force the parent into the background and let the child 
  179.          continue running in the foreground. 
  180.          
  181.  /w    - suspend parent until child completes
  182.          This will stop the parent until the spawned command completes. 
  183.          You may manually restart a waiting process by keying ESC . 
  184.          Normally you will want to use this switch in conjunction with /f.
  185.          This option also gives allows you to retrieve a DOS program 
  186.          return code from the spawned process (see below). 
  187.  
  188.  /d    - disable background operation in parent
  189.          When used with /f, this switch will also suspend the parent 
  190.          until the child completes.  This suspend is softer than /w , the 
  191.          parent process will restart automatically the first time you 
  192.          switch to it. 
  193.  
  194.  /r    - remain in dos
  195.          spawn always sets the pif field "close window on exit" to
  196.          "y" . If you want to stay at the DOS prompt at the end
  197.          of the spawned command, you must specify /r .  When this
  198.          switch is used with /a or /s, the alarm is not sounded
  199.          until you enter "exit".
  200.  
  201.  /z    - exit with background operation disabled
  202.          Some of the options (/x) work a bit more smoothly if the
  203.          parent has "runs in the background" set to "y".  Spawn will
  204.          automatically enable background operation for you, but, as a
  205.          rule, will leave it that way.  This is not much of a problem
  206.          if you are executing spawn from a DOS window, but can be 
  207.          troublesome if you are using spawn with a program which writes
  208.          directly to the screen. The option /z tells spawn to always
  209.          exit the parent with background operation disabled.  /d also
  210.          disables background operation, but will re-enable it when spawn
  211.          completes; /z does not.
  212.  
  213.  /e    - exit with background operation enabled
  214.      This is the exact opposite of /z and is included mainly for
  215.      completeness.    It may be useful at times in conjunction with the
  216.      program alert.  Alert/d works best if the foreground window has
  217.      background operation enabled.    If you are spawning off a batch
  218.      file which calls alert, you can use this switch to guarantee this
  219.      is so. See the Utilities documentation for more information on
  220.      alert.
  221.  
  222.  /x    - move parent to foreground at exit 
  223.          This will guarantee that the parent returns to the foreground 
  224.          after the child exits. This is normally used in the combination 
  225.          /w/f/x or /d/f/x to insure control returns directly to the 
  226.      parent and not to some other process. This switch does not work
  227.      properly if you also specify /z .
  228.  
  229.  /p:xx - use alternate pif
  230.          This defines the PIF file to be used in lieu of the default file 
  231.          sp-pif.dvp . This option will also override the environment 
  232.          setting SP-PIF.  This should be used if the program being 
  233.          spawned requires special Desqview options in order to function.  
  234.          This switch /p:ab is short for /p:c:\dv\ab-pif.dvp . You may 
  235.          specify a complete pathname if you wish.  The specified file must 
  236.          be a valid Desqview Program Information File, but does not have 
  237.          to be present on the Desqview "Open Window" menu. 
  238.          
  239.  /m:n  - limit memory to n K
  240.          This provides another way to control the amount of memory the 
  241.          spawned process acquires. /m:256 will give the process 256k of 
  242.          memory. This switch overrides the setting in the specified pif 
  243.          file as well as the environment variable SP-MEM . (see below) 
  244.  
  245.  /n    - This outputs the task handle of the child to stdout.  You can
  246.          redirect this to a file as in spawn /n ... >child
  247.          This file can then be used with kill.com to close the child's
  248.          window, eg, kill child .  See the Utilities documentation for
  249.          more information.
  250.  
  251. Notes and Ideas:
  252.  
  253. 1.  Watching the spawned process execute.
  254.     You can of course use spawn/f, but this sort of defeats the purpose
  255.     of using spawn.  A more elegant way is to open as small DOS window
  256.     such as D1, move it out of the way and enter something like:
  257.     spawn/p:d1/f/x  copy *.* a:
  258.     The function of the switch combination "/f/x" is to keep the parent
  259.     process in the foreground and not allow the child's window to be
  260.     hidden behind other windows. 
  261.  
  262. 2.  Using script files with spawn.
  263.     I recommend that you do not attach a script to sp-pif. If you want
  264.     use a script with a spawned process, use /P:XX to specify a PIF
  265.     file that has a script file attached to it.  The script file used
  266.     is not determined by the file name, but rather the field "Keys to
  267.     use on open menu" . If this is say, AB, and a script file
  268.     c:\dv\ab-scrip.dvs exists, Desqview will play it back in the child
  269.     process when spawn starts it. You must use /f to be sure to new 
  270.     process starts in the forground, since otherwise, the script will
  271.     play back in the wrong window.
  272.  
  273. 3.  Getting more environment space in the child process.
  274.     If you spawn off batch files that manipulate the environment with
  275.     the DOS "SET" command, you may get "out of environment space" errors
  276.     from command.com . For DOS 3.2 and 3.3, you can fix this by setting
  277.     the environment variable CMDSWT=\e:nnnn where nnnn is the number of
  278.     bytes you which to allocate to the new environment.  This text will
  279.     be placed on the command line whenever spawn invokes command.com .
  280.     For earlier versions of DOS, you will need to set up some long dummy
  281.     environment variables in the parent window (or better, before you 
  282.     start desqview) such as
  283.     set a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  284.     set b=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  285.     At the beginning of the batch file that you wish to spawn, clear 
  286.     these variables with
  287.     set a=
  288.     set b=
  289.     This will generally free up enough space for the batch file to 
  290.     continue normally.
  291.  
  292. 4.  Specifying the memory to be given to the child process.
  293.     Initially, the spawn PIF file is configured to allocate as much 
  294.     process memory as is available for the child process.  While this
  295.     is the most general, it is usually far too generous.  For most of the
  296.     programs that you would use will spawn, 256K is more than enough.
  297.     You can always modify sp-pif.dvp to scale back it maximum memory
  298.     allocation, I recommend that you instead set the environment 
  299.     variable SP-MEM=256 .  This will have the same effect, but can be 
  300.     changed more readily.  The SP-MEM setting is overridden by /m:nnn on 
  301.     the command line and is ignored when you specify an alternate pif 
  302.     file with /p:xx .  Spawn will modify the "maximum program memory 
  303.     size" field of the pif file.  If the "memory size" is greater than 
  304.     the "maximum memory" both are set to the specified value.  In all 
  305.     cases, 8k is added to both fields to help accommodate spawn overhead
  306.     If you specify the program with a full pathname and do not have
  307.     a large environment, the overhead in the child will be only about 
  308.     4k. If you are trying to conserve memory, you can use a /m:n switch 
  309.     to reduce this adjustment. 
  310.  
  311. 5.  Modifying SP-PIF.DVP
  312.     Spawn itself is not very sensitive to the set up of the PIF file (as 
  313.     long as there is sufficient memory to start the child process). Spawn 
  314.     will modify the various fields if it needs to.  In particular, the 
  315.     following are always replaced by spawn:
  316.  
  317.     Program name
  318.     Program parameters
  319.     Directory
  320.     Close on exit (always set to yes)
  321.  
  322.     Anything placed in these fields will never be used. As I have 
  323.     mentioned, the process SP does not have to be in the Desqview "Open 
  324.     Window" in order for spawn to function. So after making whatever 
  325.     modifications desired, you may delete the menu item "SP". You must 
  326.     then rename the file sp-pif.bak to sp-pif.dvp in order for spawn to 
  327.     be able to find it. 
  328.  
  329.     Spawn will occasionally adjust other PIF parameters.  If, for 
  330.     example, you use spawn/p:xx to execute something in the background,
  331.     spawn assumes that you intend for it to execute, and will set
  332.     "runs in the background" to "y"
  333.      
  334. 8.  Flicker during startup.
  335.     One possible modification to sp-pif that you may wish to consider is
  336.     changing the starting height,width to 1,1 and initial position to
  337.     1,78 .  These settings help to minimize the brief flicker that occurs
  338.     when the spawned command starts and completes.  At least, it moves it
  339.     to    the upper right hand corner of the display where it is less
  340.     obtrusive.    Of course, if you latter wish to switch to the "spawn"
  341.     window, you will have to zoom it to full size in order to see anything.
  342.  
  343. 7.  Getting the DOS return code from a child.
  344.     When spawn is used with /w, the normal program return code of the 
  345.     child process is returned by spawn to the parent.  This can be used 
  346.     with an "if errorlevel" test inside of a batch file. The return code 
  347.     will correct when following conditions are met: 
  348.     a.  spawn was executed with the /w option and not /r
  349.     b.  a complete pathname was given for the executable command
  350.         You can use the utility release.com to bypass this rule
  351.         and return an exit code from a batch file.
  352.     c.  the command was not enclosed in quotes
  353.         Again this does not apply to release.com
  354.     d.  the wait was not aborted with ESC in the parent or a "close window"
  355.         command in the child
  356.     If (d) fails, or some other error occurs, spawn will return a value 
  357.     of 255. Otherwise spawn will return a condition code of 0. 
  358.  
  359. 8.  Using spawn to force a context switch.
  360.     Some text editors have the ability to run a compiler or assembler
  361.     while the user remains inside the editor environment.  Since the
  362.     editor is still in memory, the total ram that is available to the
  363.     compiler is limited.  If the editor can be configured to invoke
  364.     the compiler with something like  spawn /w/f/p:bd c:\cc\tcc.exe ...
  365.     then the compiler will run in its own window with a full compliment
  366.     of memory.  The /w switch is appropriate here since the editor must
  367.     wait for the compilation to complete before continuing and may need
  368.     the correct return code from tcc.exe .
  369.  
  370.     This sort of thing can also be done from a batch file so that full 
  371.     screen editors and the like can be conveniently run from a small 
  372.     Desqview window. For example, if you have an editor say edit.exe, you 
  373.     can create a one line batch file, say ed.bat, containing
  374.     @spawn/d/f/x/p:ed  c:\bin\edit.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 
  375.     The /d will disable the DOS window while the editor is running, but 
  376.     unlike /w, /d will allow the DOS window to restart the first time you 
  377.     select it. The /x will assure that DOS regains control when the editor
  378.     finishes.  Without the /x, if you were to pull up a third window while
  379.     in the editor, control of the keyboard would pass to this window when
  380.     you exit the editor.  Finally, the switch /p:ed selects a pif file 
  381.     appropriate to the editor.
  382.  
  383. 9.  Transferring the child's console output back to the parent.
  384.     Some text editors have the capability to executing a program, such as
  385.     a compiler and capturing the console output, which is displayed in
  386.     various ways.  If you wish to use something like this with spawn, you
  387.     will need to start a batch file such as:
  388.  
  389.     if "%1"=="*" shift
  390.     if "%0"=="*" goto child
  391.     spawn/w/f/x "%0 * %1 >desqtmp.$$$"
  392.     type desqtmp.$$$
  393.     goto quit
  394.     :child
  395.     masm %1;
  396.     ...
  397.  
  398.     The value of the variable %1 is assumed to be the filename to be
  399.     processed and is supplied by the editor. %0 is set by command.com
  400.     to the name of the batch file being executed.  Its presence in the
  401.     spawn command cause spawn to reinvoke the same batch file for the child.
  402.     So the child can know which is which, a "*" is placed in the first slot.
  403.     The function of the first two lines is to test for and get rid of the
  404.     "*".  It may seem that it would be more efficient to invoke a different
  405.     batch file for the child.  Actually, if you use a disk cache, this method
  406.     is probably faster, and even if not, it makes things a bit easier to
  407.     manage if everything is kept together.
  408.  
  409. 10. If you do not have a 386 processor.
  410.     You can still use spawn for context switching with a non-multitasking
  411.     system.  In this case, the parent process will swap out when spawn is
  412.     invoked.  You will generally want to use /f so that the parent isn't
  413.     swapped back initially.  If the current process is marked non-
  414.     swappable and there isn't sufficient conventional memory to load the
  415.     child process, then spawn will fail with the message "api error
  416.     activating new process".
  417.  
  418.     If you want the child process to run concurrently with the parent, you
  419.     must lower the "maximum program memory" in the parent window to a value
  420.     small enough so that there is sufficient free conventional memory to
  421.     hold both processes.  The exact amount will vary, but a figure of about
  422.     180k will permit one 180k process to spawn.
  423.  
  424. 11. If you are running 4dos ***
  425.     You can spawn off multiple commands using the usual 4dos logical
  426.     end of line character: "^" as in
  427.     spawn "command^command"
  428.     The quotes are required.
  429.  
  430.     Spawn and 4dos both make use of the environment variable "CMDLINE".
  431.     This should not be a conflict, since we are both using this variable
  432.     to mean the same thing.  At present, spawn does not support arguments
  433.     greater than 127 bytes.
  434.  
  435.     With version 2.2 and below, 4dos passed the alias list with the
  436.     environment, which meant that the child would inherit the aliases
  437.     that where in effect when spawn was invoked.  Starting with version
  438.     3.0 of 4dos, the alias list is kept out of the environment, so
  439.     the child process gets whatever aliases that were in effect when
  440.     desqview started.  This will probably work better, since you can
  441.     set up a general purpose alias list as part of your desqview startup
  442.     procedure.  The child process will receive the general purpose aliases
  443.     rather than the parent's, which may be only appropriate for, say, small
  444.     windows.  If you wish to force the child to get an updated alias
  445.     list, you may uses the alias /r command of 4dos , for example:
  446.  
  447.     in parent:  alias >desqtmp.$$$
  448.                 spawn ...
  449.     in child:   alias /r desqtmp.$$$
  450.  
  451.     *** If you are not using 4dos (tm), it is a shareware replacement
  452.     for command.com by Rex C. Conn and Tom Rawson. Together with Desqview,
  453.     it is one of the best DOS enhancement programs ever.  It is, of
  454.     course, fully compatible with Desqview.  I cannot give this program
  455.     a higher personal recommendation.
  456.  
  457. 12. SP-CMD and Behavior outside of Desqview.
  458.     If spawn is invoked without the presence of desqview, all of the
  459.     options are ignored and the command is processed by calling a
  460.     secondary copy of command.com .  This may be useful on occasion,
  461.     given the processing of the CMDSWT environment variable, but the
  462.     primary reason for including this feature is so that you may
  463.     imbed spawn into such things as text editor "shell" commands without
  464.     having to change configurations when you are outside of Desqview.
  465.     There is a small price to pay for this convenience: about 6k of
  466.     memory.
  467.  
  468.     You can use SP-CMD to control what program is invoked to execute
  469.     you command.  For example, if you are using 4DOS, but want spawn
  470.     to execute command.com you could set
  471.  
  472.     sp-cmd=c:\command.com /c
  473.  
  474.     A full pathname and the "/c" are required.    The CMDSWT variable is
  475.     still used and is inserted as usual, just before the "/c".
  476.  
  477.     A much more useful application of this feature is to have spawn
  478.     invoke SWAPDOS *** .  You will have to learn the ins and outs of
  479.     this program for yourself, but I have found that using the "long"
  480.     method seems to work better on my system.  That is, sometime before
  481.     invoking the program which will be swapped, run swapdos /m to mark
  482.     the current memory configuration, then use swapdos /l .
  483.     If you have spawn commands imbedded in an editor, you can make this
  484.     automatic with
  485.  
  486.     set sp-cmd=c:\bin\swapdos.com /l
  487.  
  488.     If you are using quoted commands with spawn to redirect the child's
  489.     stdout, etc, you will need to use
  490.  
  491.     set sp-cmd=c:\command.com /c swapdos /l
  492.  
  493.     so that command.com will be invoked to process the redirection.
  494.  
  495.     At this time, SP-CMD is not supported inside desqview because of
  496.     conflicts with other features.
  497.  
  498.     *** SWAPDOS (TM) is a shareware product by Nico Mak and distributed by
  499.     Innovative Data Concepts. It is used to free up memory when shelling
  500.     out of an application such as a text editor.
  501.  
  502. 13. Misc
  503.     As mentioned, spawn will set up the current default drive and
  504.     directory in the child.  This only occurs on the default drive.
  505.     Other drives will keep the default directory information that was
  506.     in effect when desqview started.
  507.  
  508.     If you start a background process from a window which has "share
  509.     cpu" set to "n", the spawned process will be suspended as soon
  510.     as it starts.  This is, after all, what this setting means.  I have
  511.     attempted to smooth out these types of things, but in this case,
  512.     Desqview doesn't give me the ability to take corrective action.
  513.  
  514. 14. Trademarks, etc
  515.     Desqview is a trademark of Quarterdeck Office Systems.
  516.     MS-DOS is a trademark of Microsoft Corp.
  517.     IBM and IBM PC are trademarks of IBM Corp.
  518.     4dos is a trademark of J & P Software.
  519.     Swapdos is a trademark of Nico Mak and/or Innovative Data Concepts.
  520.  
  521.     While I genuinely believe that this program performs as advertised,
  522.     and will make every effort to see to it that this remains the case,
  523.     you must assume responsibility for its operation, proper or improper.
  524.     Considering the price, I think that's a pretty good deal.
  525.